import axios from "axios";
import { Loading, Message } from "element-ui";
import router from "@/router";
import store from "@/store";
const baseURL = process.env.VUE_APP_BASE_URL;
// const baseURL = `http://localhost:8888/api/private/v1`
// const baseURL = `http://localhost:8888/api/private/v1`;
axios.defaults.baseURL = baseURL;
axios.defaults.timeout = 15000;
axios.defaults.headers["Content-Type"] = "application/json";
// axios.defaults.headers["Content-Type"] = "application/x-www-form-urlencoded";
let loading;
// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    console.log(config);
    if (config.url !== "/login") {
      if (store.state.token) {
        config.headers["Authorization"] = store.state.token;
      } else {
        router.replace({
          name: "Login",
        });
        return;
      }
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    console.log(error);
    return Promise.reject(error);
  }
);

// 添加响应拦截器
axios.interceptors.response.use(
  function (res) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    if ((res.status >= 200 && res.status < 300) || res.status === 304) {
      if (res.data.meta.status >= 200 && res.data.meta.status < 300) {
        return Promise.resolve(res.data);
      } else if (res.data.meta.msg.includes("token")) {
        Message.error(res.data.meta.msg);
        router.replace({
          name: "Login",
        });
      } else {
        Message.error(res.data.meta.msg);
        return Promise.reject(res.data.meta.msg);
      }
    } else {
      Message({
        message: res.statusText,
        type: "error",
      });
      return Promise.reject(res.statusText);
    }
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    Message({
      message:
        error.message.indexOf("cancelToken") >= 0
          ? "需要认证token"
          : error.message,
      type: "error",
    });
    return Promise.reject(error.message);
  }
);
export const http = (
  url,
  method = "GET",
  data = {},
  params = {},
  status = false
) => {
  //   return new Promise((resolve, reject) => {
  if (status) {
    loading = Loading.service({ fullscreen: true });
  }
  return (
    axios({
      url,
      method,
      data,
      params,
    })
      //   .then((res) => {
      //     if ((res.status >= 200 && res.status < 300) || res.status === 304) {
      //       if (res.data.meta.status === 200) {
      //         resolve(res.data);
      //       } else {
      //         Message.error(res.data.meta.msg);
      //         reject(res.data.meta.msg);
      //       }
      //     } else {
      //       Message({
      //         message: res.statusText,
      //         type: "error",
      //       });
      //       reject(res.statusText);
      //     }
      //   })
      //   .catch((err) => {
      //     Message({
      //       message: err,
      //       type: "error",
      //     });
      //   })
      .finally(() => {
        loading && loading.close();
        status = false;
      })
  );
  //   });
};

export default baseURL;
